import logging  # 导入日志库
import pymysql  # 导入数据库
import colorlog   # 导入彩色日志

logger = colorlog.getLogger("猫猫记录器")  # 创建彩色日志的记录器 实例对象
logger.setLevel(colorlog.DEBUG)  # 设置彩色日志记录器 会记录的最低等级的日志是info （默认是warning）

# 设置彩色日志的格式：日志颜色、记录触发时间、记录器名称、触发的行数、日志等级名称、日志内容等
mao_ft_1 = "%(log_color)s%(asctime)s [%(name)s] [line:%(lineno)d] %(levelname)s -- %(message)s"
mao_format_1 = colorlog.ColoredFormatter(mao_ft_1, log_colors={'DEBUG': 'cyan', 'INFO': 'green', 'WARNING': 'orange', 'ERROR': 'red', 'CAITICAL': 'red'})  # 创建彩色日志的格式器 实例对象

# 设置基础日志的格式：记录触发时间、记录器名称、触发的行数、日志等级名称、日志内容等
mao_ft_2 = "%(asctime)s [%(name)s] [line:%(lineno)d] %(levelname)s -- %(message)s"
mao_format_2 = logging.Formatter(mao_ft_2)  # 创建格式器 实例对象

# 创建彩色日志的处理器 只能创建终端处理器
handle_1 = colorlog.StreamHandler()  # 创建处理器 实例对象
handle_1.setLevel(colorlog.DEBUG)  # 设置处理器 会处理的最低等级的日志是info（默认是warning）
handle_1.setFormatter(mao_format_1)  # 给处理器 设置格式器

# 创建基础日志的处理器 文件处理器
handle_2 = logging.FileHandler("猫猫日志.log", encoding="utf-8")  # 创建处理器 实例对象
handle_2.setLevel(logging.DEBUG)  # 设置处理器 会处理的最低等级的日志是info（默认是warning）
handle_2.setFormatter(mao_format_2)  # 给处理器 设置格式器

logger.addHandler(handle_1)   # 给记录器 添加 彩色日志的处理器
logger.addHandler(handle_2)   # 给记录器 添加 基础日志的处理器


# 捕获异常
try:  # 这里写入可能会出现异常的代码
    conn = pymysql.Connection(  # 创建数据库链接的 实例对象
        host='10.13.10.53',
        port=3306,
        user='tester',
        password='AY^1F6pZlkVx9jqd',
        autocommit=False
    )
    logger.debug("链接数据库成功！")
    cursor = conn.cursor()  # 获取 数据库链接实例对象 的游标对象
    conn.select_db('open_employ')  # 选择要操作的数据库

    # 新增数据内容
    dict_test = {"name": '摩卡猫猫', "worker_no": 80001799, "clock_time": '2025-03-15 23:00:00', "attend_type": 0}
    # 插入语句 当value的值是动态时，可以使用占位符进行占位
    insert_sql = "INSERT INTO `attend_machine_record` (`name`, `worker_no`, `clock_type`, `clock_time`, `is_deleted`, `gmt_create`, `gmt_modified`, `attend_machine_id`, `attend_machine_name`, `attend_type`, `valid_status`, `update_by`) " \
                 "VALUES(%s, %s, 1, %s, 0, %s, %s, 2107839, '三楼前台', %s, 1, NULL )"
    logger.debug(f"接收到你的sql语句啦！sql内容是：{insert_sql}")
    logger.debug(f"sql的动态数据是：{dict_test}")

    # 执行插入操作 执行insert语句，依次对语句中的占位符赋值
    rows = cursor.execute(insert_sql, (
    dict_test["name"], dict_test["worker_no"], dict_test["clock_time"], dict_test["clock_time"], dict_test["clock_time"], dict_test["attend_type"]))

    logger.info(f"新增sql执行成功，新增了{rows}行的数据！")

except Exception as e:  # 这里写入如果发生异常要执行的代码
    logger.error(f"嘿，这里发生错误啦！，请检查~错误信息是：{e}")

# else:      # 这里写入没有发生异常而执行的代码

finally:  # 这里写入 无论是否有没有发生异常 都要执行的代码
    if 'cursor' in locals() and cursor:    # 关闭游标
        cursor.close()
    if 'conn' in locals() and conn:   # 关闭链接
        conn.close()
